home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / stdcomp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  56.5 KB  |  1,828 lines

  1. #ifndef __STDCOMP_H
  2. #define __STDCOMP_H
  3. #define __STD_RWCOMPILER_H__ 1
  4. #ifndef __cplusplus
  5. #error Must use C++ for STDCOMP.H
  6. #endif
  7.  
  8. #pragma option push -b -a4 -Vx- -Ve- -w-inl -w-aus -w-sig
  9.  
  10. /***************************************************************************
  11.  *
  12.  * Compiler and system related foibles and directives
  13.  *
  14.  * $Id: stdcomp.in,v 1.218 1996/09/27 06:05:57 delaney Exp $
  15.  *
  16.  ***************************************************************************
  17.  *
  18.  * (c) Copyright 1994, 1995 Rogue Wave Software, Inc.
  19.  * ALL RIGHTS RESERVED *
  20.  * The software and information contained herein are proprietary to, and
  21.  * comprise valuable trade secrets of, Rogue Wave Software, Inc., which
  22.  * intends to preserve as trade secrets such software and information.
  23.  * This software is furnished pursuant to a written license agreement and
  24.  * may be used, copied, transmitted, and stored only in accordance with
  25.  * the terms of such license and with the inclusion of the above copyright
  26.  * notice.  This software and information or any other copies thereof may
  27.  * not be provided or otherwise made available to any other person.
  28.  *
  29.  * Notwithstanding any other lease or license that may pertain to, or
  30.  * accompany the delivery of, this computer software and information, the
  31.  * rights of the Government regarding its use, reproduction and disclosure
  32.  * are as set forth in Section 52.227-19 of the FARS Computer
  33.  * Software-Restricted Rights clause.
  34.  * 
  35.  * Use, duplication, or disclosure by the Government is subject to
  36.  * restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
  37.  * Technical Data and Computer Software clause at DFARS 252.227-7013.
  38.  * Contractor/Manufacturer is Rogue Wave Software, Inc.,
  39.  * P.O. Box 2328, Corvallis, Oregon 97339.
  40.  *
  41.  * This computer software and information is distributed with "restricted
  42.  * rights."  Use, duplication or disclosure is subject to restrictions as
  43.  * set forth in NASA FAR SUP 18-52.227-79 (April 1985) "Commercial
  44.  * Computer Software-Restricted Rights (April 1985)."  If the Clause at
  45.  * 18-52.227-74 "Rights in Data General" is specified in the contract,
  46.  * then the "Alternate III" clause applies.
  47.  *
  48.  **************************************************************************/
  49.  
  50. /****************************************************************
  51.  ****************************************************************
  52.  *                                *
  53.  *        U S E R   T U N A B L E   S E C T I O N        *
  54.  *                                *
  55.  ****************************************************************
  56.  ****************************************************************/
  57.  
  58.  
  59. // Library version number
  60. #define _RWSTD_VER 0x0201
  61.  
  62.  
  63. /*
  64.  * This section has various preprocessor constants that can
  65.  * be set to reflect the properties of your compiler.  For most
  66.  * compilers (particularly, MS-DOS compilers) there is no need
  67.  * to do anything --- most settings can be autodetected.
  68.  *
  69.  * For many Unix compilers you may have to tune the settings below.
  70.  * This is most easily done by running the "config" shell script
  71.  * which will try various test programs to discover the properties
  72.  * of your compiler.
  73.  *
  74.  *       THIS IS FAR EASIER THAN SETTING THESE BY HAND!
  75.  */
  76.  
  77. /*
  78.  *                   AT&T "CFRONT" USERS
  79.  */
  80.  
  81.  
  82. /* 
  83.  * Most compilers have a built in "manifest constant".
  84.  * For the following compilers you must supply one by uncommenting
  85.  * an appropriate line:
  86.  *
  87.  *   AT&T cfront V2.X:       __ATT2__
  88.  *   AT&T cfront V3.0:       __ATT3__
  89.  */
  90.  
  91. /* #define __ATT2__ 1 */
  92. /* #define __ATT3__ 1 */
  93.  
  94. /**
  95.  **                     *** ALL USERS ***
  96.  **/
  97.  
  98.  
  99. #define _RWSTD_NOMSG    0x00
  100. #define _RWSTD_CATGETS  0x01
  101. #define _RWSTD_GETTEXT  0x02
  102. #define _RWSTD_DGETTEXT 0x03
  103.  
  104. /*
  105.  * Set _RWSTD_MESSAGE to the type of messaging facility you want:
  106.  *   _RWSTD_NOMSG     No messaging facility
  107.  *   _RWSTD_CATGETS  Use catgets()
  108.  *   _RWSTD_GETTEXT  Use gettext()
  109.  *   _RWSTD_DGETTEXT Use dgettext()
  110.  */
  111.  
  112. #define _RWSTD_MESSAGE _RWSTD_NOMSG
  113.  
  114.  
  115. #if !defined( __TURBOC__) && !defined(_MSC_VER) && !defined(_OS2)
  116.  
  117. /******************** OPTIONAL LIBRARY FEATURES********************/
  118. /*  turned off by default                                         */
  119.  
  120. /* Uncomment the following if you wish for bounds checking to be  
  121.  * performed for operator[] for deque and vector
  122.  */
  123.  
  124. /* #define _RWSTD_BOUNDS_CHECKING 1 */
  125.  
  126. /******************** COMPILER WORD SIZES, ETC ********************/
  127.  
  128. /*
  129.  * Uncomment the following and set to the number of decimal digits
  130.  * of precision for type double.
  131.  * If you do nothing, the default will be 16.
  132.  */
  133.  
  134. /* #define _RWSTD_DEFAULT_PRECISION 16 */
  135.  
  136.  
  137. /*************** COMPILER QUIRKS AND LIMITATIONS ******************/
  138.  
  139. /*
  140.  * Uncomment the following if your compiler does not support
  141.  * exceptions.
  142.  */
  143.  
  144. /* #define _RWSTD_NO_EXCEPTIONS 1 */
  145.  
  146. /*
  147.  * Uncomment the following if your compiler does not support
  148.  * exceptions specifications.
  149.  */
  150.  
  151. /* #define _RWSTD_NO_EX_SPEC 1 */
  152.  
  153.  
  154. /*
  155.  * Uncomment the following if your compiler does not support
  156.  * throwing of exceptions from a shared library.
  157.  */
  158.  
  159. /* #define _RWSTD_NO_THROW_WITH_SHARED 1 */
  160.  
  161. /*************************** TEMPLATES **********************************/
  162.  
  163. /*
  164.  * Uncomment the following if your compiler does not instantiates only those
  165.  * functions, member functions, classes or member classes that are
  166.  * required; i.e. your compiler instantiates things that your program
  167.  * doesn't actually use.
  168.  */
  169.  
  170. /* #define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1 */
  171.  
  172. /*
  173.  * Uncomment the following if your compiler does not allow an unused
  174.  * T *operator-> in a template<class T> when T is of non-class type.
  175.  */
  176.  
  177. /* #define _RWSTD_NO_NONCLASS_ARROW_RETURN 1 */
  178.  
  179. /*
  180.  * Uncomment the following if your compiler does not support the new syntax
  181.  * for functions that are templatized only on the return type, e.g.
  182.  *     template<class T> T func (void);  // Declare the function template
  183.  *     int my_int = func<int>();         // Call the function
  184.  */
  185.  
  186. /* #define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 1 */
  187.  
  188. /*
  189.  * Uncomment the following if your compiler does template
  190.  * instantiation at compile time.
  191.  */
  192.  
  193. /* #define _RWSTD_COMPILE_INSTANTIATE 1 */
  194.  
  195.  
  196. /*************************** STRINGS ****************************/
  197.  
  198. /*
  199.  * Uncomment the following if your sprintf() does not
  200.  * return the size of the buffer as an int, as ANSI C requires.
  201.  */
  202.  
  203. /* #define _RWSTD_NO_ANSI_SPRINTF 1 */
  204.  
  205.  
  206. /*
  207.  * Uncomment the following if your compiler does not have the
  208.  * ANSI C function memmove().
  209.  */
  210.  
  211. /* #define _RWSTD_NO_MEMMOVE 1 */
  212.  
  213. /*
  214.  * Uncomment the following if your compiler's stdio.h does not define
  215.  * an fpos_t type.
  216.  */
  217.  
  218. /* #define _RWSTD_NO_FPOS_T 1 */
  219.  
  220. /*
  221.  * Uncomment the following if your compiler's stdlib.h does not provide
  222.  * an ldiv function.
  223.  */
  224.  
  225. /* #define _RWSTD_NO_LDIV 1 */
  226.  
  227. /*
  228.  * Uncomment the following if your compiler's <typeinfo> header does not
  229.  * define a bad_cast exception type.
  230.  */
  231.  
  232. /* #define _RWSTD_NO_BAD_CAST 1 */
  233.  
  234. /****************** INTERNATIONALIZATION ************************/
  235.  
  236. /*
  237.  * Uncomment the following if your compiler does not support
  238.  * wide characters strings (e.g., functions wslen(), etc.).
  239.  */
  240.  
  241. /* #define _RWSTD_NO_WSTR 1 */
  242.  
  243. /*
  244.  * Uncomment the following your compiler does not define type wint_t
  245.  * in either wchar.h or wctype.h.
  246.  */
  247.  
  248. /* #define _RWSTD_NO_WINT_TYPE 1 */
  249.  
  250. /*
  251.  * Uncomment the following if your compiler does not provide wide
  252.  * character functions swscanf and swprintf.
  253.  */
  254.  
  255. /* #define _RWSTD_NO_SWPRINTF 1 */
  256.  
  257. /*
  258.  * Uncomment the following if your compiler cannot distinguish wchar_t from
  259.  * other integer types in template argument lists.
  260.  */
  261.  
  262. /* #define _RWSTD_NO_OVERLOAD_WCHAR 1 */
  263.  
  264.  
  265. /*
  266.  * Uncomment the following if your compiler does not support
  267.  * the ANSI C locale facility fully, or if it does not support
  268.  * it at all (in particular, uncomment if setlocale(), strxform(),
  269.  * or strcoll() are not present or don't work).
  270.  */
  271.  
  272. /* #define _RWSTD_NO_LOCALE 1 */
  273.  
  274.  
  275. /*
  276.  * Uncomment the following if your compiler does not have
  277.  * the %C directive to strftime().
  278.  */
  279.  
  280. /* #define _RWSTD_NO_STRFTIME_CAPC 1 */
  281.  
  282.  
  283. /************************** TIME ********************************/
  284.  
  285. /*
  286.  * Uncomment the following if your compiler does not have global
  287.  * variables "_daylight", "_timezone", and "_tzname", or corresponding
  288.  * variables without a leading underscore (generally
  289.  * this is true only for pure Berkeley systems).
  290.  */
  291.  
  292. /* #define _RWSTD_NO_GLOBAL_TZ 1 */
  293.  
  294.  
  295. /*
  296.  * Uncomment the following if your system supplies a global variable
  297.  * named "daylight" instead of the nominally more correct "_daylight".
  298.  */
  299.  
  300. /* #define _RWSTD_NO_LEADING_UNDERSCORE 1 */
  301.  
  302.  
  303. /*
  304.  * If your system does not have global variables "daylight" and
  305.  * "timezone" (see directive immediately above) and does not have
  306.  * the Berkeley function gettimeofday() either, then uncomment
  307.  * the following:
  308.  */
  309.  
  310. /* #define _RWSTD_NO_GETTIMEOFDAY 1 */
  311.  
  312.  
  313. /*
  314.  * If the struct tm defined in your <time.h> has extra member data
  315.  * "tm_zone" and "tm_gmtoff" (this is true for SunOs 4.X), then you
  316.  * should uncomment the following:
  317.  */
  318.  
  319. /* #define _RWSTD_STRUCT_TM_TZ 1 */
  320.  
  321.  
  322. /* Uncomment the following if you have a Solaris platform that
  323.  * supports threads.  (We choose this if you have it, in
  324.  * preference to other thread packages. You may prefer a
  325.  * different package.)
  326.  */
  327.  
  328. /* #define _RWSTD_SOLARIS_THREADS 1 */
  329.  
  330. /* Uncomment the following if you have a threads package which
  331.  * meets an early Posix draft, and you don't have Solaris threads.
  332.  */
  333.  
  334. /* #define _RWSTD_POSIX_THREADS 1 */
  335.  
  336. /* As above, if you have threads which meet
  337.  * the Posix Draft 10 threads description. If you define this,
  338.  * then you must also define RW_POSIX_THREADS
  339.  */
  340.  
  341. /* #define _RWSTD_POSIX_D10_THREADS 1 */
  342.  
  343. /* Uncomment the following if pthread_mutexattr_default is
  344.  * provided by your threads package. The posix standard (draft 10)
  345.  * does not require a pthreads package to provide this value.
  346.  */
  347.  
  348. /* #define _RWSTD_MUTEXATTR_DEFAULT 1 */
  349.  
  350. /* Uncomment the following if you have no threads, or your package doesn't
  351.  * meet our expectations for header and function names.
  352.  */
  353.  
  354. /* #define _RWSTD_NO_THREADS 1 */
  355.  
  356.  
  357. /************************** STANDARD LIBRARY ****************************/
  358.  
  359. /*
  360.  * Uncomment the following if your compiler does not support the bool type.
  361.  * This means that bool is not a unique type.
  362.  */
  363.  
  364. /* #define _RWSTD_NO_BOOL 1 */
  365.  
  366. /*
  367.  * Uncomment the following if your compiler does not support simple
  368.  * default templates. e.g:
  369.  * template<class T = int> ...
  370.  */
  371.  
  372. /* #define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES 1 */
  373.  
  374. /*
  375.  * Uncomment the following if your compiler does not support complex
  376.  * default templates. e.g:
  377.  * template<class T = foo<T> > ...
  378.  */
  379.  
  380. /* #define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES 1 */
  381.  
  382. /*
  383.  * Uncomment the following if your compiler doesn't support ~T() 
  384.  * where T is a builtin.
  385.  */
  386.  
  387. /* #define _RWSTD_NO_DESTROY_BUILTIN 1 */
  388.  
  389. /*
  390.  * Uncomment the following if your compiler doesn't support ~T()
  391.  * where T is a non-builtin.
  392.  */
  393.  
  394. /* #define _RWSTD_NO_DESTROY_NONBUILTIN 1 */
  395.  
  396. /*
  397.  * If your compiler does not support complicated exceptions, such as
  398.  * throwing a domain_error exception, then uncomment the following:
  399.  */
  400.  
  401. /* #define _RWSTD_NO_COMPLICATED_EXCEPTIONS 1 */
  402.  
  403. /*
  404.  * Uncomment the following if your compiler cannot handle nested
  405.  * templates, or if you have to define the body of a class within
  406.  * the template (mostly sun compilers!)
  407.  */
  408.  
  409. /* #define _RWSTD_NO_NESTING_TEMPLATES 1 */
  410.  
  411. /*
  412.  * If your compiler does not support long double operators in iostreams, then
  413.  * uncomment the following:
  414.  */
  415.  
  416. /* #define _RWSTD_NO_STREAM_LONG_DOUBLE 1 */
  417.  
  418. /*
  419.  * Uncomment the following if your compiler does not support the
  420.  * _MUTABLE keyword
  421.  */
  422.  
  423. /* #define _RWSTD_NO_MUTABLE 1 */
  424.  
  425. /*
  426.  * If your compiler does not support namespaces, uncomment the following
  427.  */
  428.  
  429. /* #define _RWSTD_NO_NAMESPACE 1 */
  430.  
  431. /*
  432.  * Uncomment the following if your compiler does not support
  433.  * member template functions:
  434.  * template<class T> class C {
  435.  *  template<class F> void foo();
  436.  * };
  437.  */
  438.  
  439. /* #define _RWSTD_NO_MEMBER_TEMPLATES 1 */
  440.  
  441.  
  442. /*
  443.  * Uncomment the following if your compiler does not support
  444.  * member template classes:
  445.  * class C {
  446.  *  template <class F> class N {};
  447.  * };
  448.  */
  449.  
  450. /* #define _RWSTD_NO_MEM_CLASS_TEMPLATES 1 */
  451.  
  452. /*
  453.  * Uncomment the following if your compiler does not support declaring a
  454.  * template function to be a friend:
  455.  *   class C {
  456.  *     template <class T> friend void foo (T);
  457.  *   };
  458.  */
  459.  
  460. /* #define _RWSTD_NO_FRIEND_TEMPLATES 1 */
  461.  
  462. /*
  463.  * If nontype-args are not allowed in function declarations, then uncomment
  464.  * the following.  template<int i> void foo(char f[10][i])
  465.  */
  466.  
  467. /* #define _RWSTD_NO_NONTYPE_ARGS 1 */
  468.  
  469. /*
  470.  * If simple static initialization of const member variables is not allowed,
  471.  * uncomment the following
  472.  */
  473.  
  474. /* #define _RWSTD_NO_STI_SIMPLE 1 */
  475.  
  476. /*
  477.  * If simple static initialization of const member variables in a
  478.  * template is not allowed, then uncomment the following
  479.  */
  480.  
  481. /* #define _RWSTD_NO_STI_TEMPLATE 1 */
  482.  
  483. /*
  484.  * If FLT_ROUNDS is a constant and not a variable,
  485.  * uncomment the following
  486.  */
  487.  
  488. /* #define _RWSTD_FLT_ROUNDS_IS_CONSTANT 1 */
  489.  
  490. /*
  491.  * If nested static template variables cannot be defined outside the
  492.  * class, uncomment this.
  493. */
  494.  
  495. /* #define _RWSTD_NO_STATIC_DEF 1 */
  496.  
  497. /*
  498.  * If static template variable definitions do not require initializers,
  499.  * uncomment this.
  500.  */
  501.  
  502. /* #define _RWSTD_NO_STATIC_DEF2 1 */
  503.  
  504.  
  505. /*
  506.  * If templatized static data members do not work correctly, uncomment this.
  507.  */
  508.  
  509. /* #define _RWSTD_NO_STATIC_DEF3 1 */
  510.  
  511.  
  512. /*
  513.  * Are long mangled names handled correctly by your compiler/linker?
  514.  * If not, uncomment the following
  515.  */
  516.  
  517. /* #define _RWSTD_NO_LONG_NAME 1 */
  518.  
  519. /*
  520.  * Are complicated typedefs handled by your compiler?
  521.  * If not, uncomment the following
  522.  */
  523.  
  524. /* #define _RWSTD_NO_COMPLICATED_TYPEDEF 1 */
  525.  
  526. /*
  527.  * Are embedded typedefs supported?
  528.  * If not, uncomment the following
  529. */
  530.  
  531. /* #define _RWSTD_NO_EMBEDDED_TYPEDEF 1 */
  532.  
  533. /*
  534.  * If your compiler does not support template template classes, then
  535.  * uncomment the following:
  536.  * template<class T, template<class U> allocator>
  537.  */
  538.  
  539. /* #define _RWSTD_NO_TEMPLATE_TEMPLATE 1 */
  540.  
  541. /*
  542.  * If your compiler does not have a wchar_t type, uncomment
  543.  * the following
  544.  */
  545.  
  546. /* #define _RWSTD_NO_WIDE_CHAR 1 */
  547.  
  548. /*
  549.  * If your compiler does not have a wchar.h header file, uncomment
  550.  * the following
  551.  */
  552.  
  553. /* #define _RWSTD_NO_WCHAR_H 1 */
  554.  
  555. /*
  556.  * If your compiler does not handle typedef scoping correctly,
  557.  * then uncomment the following.
  558.  */
  559.  
  560. /* #define _RWSTD_NO_TYPEDEF_OVERLOAD 1 */
  561.  
  562. /*
  563.  * If your compiler does not function match on template base classes
  564.  * correctly, then uncomment the following.
  565.  */
  566.  
  567. /* #define _RWSTD_NO_BASE_CLASS_MATCH 1 */
  568.  
  569. /*
  570.  * If your compiler does not handle forward specializations
  571.  * correctly, then uncomment the following.
  572.  */
  573.  
  574. /* #define _RWSTD_NO_FORWARD_SPECIALIZATIONS 1 */
  575.  
  576. /*
  577.  * If your compiler does not handle template types as return types 
  578.  * uncomment the following.
  579.  */
  580.  
  581. /* #define _RWSTD_NO_RET_TEMPLATE 1 */
  582.  
  583. /*
  584.  * If your compiler does not understand explicit constructors, uncomment
  585.  * the following.
  586.  */
  587.  
  588. /* #define _RWSTD_NO_EXPLICIT 1 */
  589.  
  590. /*
  591.  * If your compiler does not understand explicit argument qualification, 
  592.  * uncomment the following.
  593.  */
  594.  
  595. /* #define _RWSTD_NO_EXPLICIT_ARG 1 */
  596.  
  597.  
  598. /*
  599.  * If your compiler does not understand the typename keyword, uncomment
  600.  * the following.
  601.  */
  602.  
  603. /* #define _RWSTD_NO_TYPENAME 1 */
  604.  
  605. /*
  606.  * Does your compiler instantiate typedefs of itself correctly?  
  607.  * If not, uncomment the following
  608.  */
  609.  
  610. /* #define _RWSTD_NO_TYPEDEF_INST 1 */
  611.  
  612. /*
  613.  * Does your compiler instantiate templates with const types correctly?  
  614.  * If not, uncomment the following
  615.  */
  616.  
  617. /* #define _RWSTD_NO_CONST_INST 1 */
  618.  
  619. /*
  620.  * Does your compiler assume trait typedefs are int? If not, uncomment
  621.  * the following
  622.  */
  623.  
  624. /* #define _RWSTD_NO_INT_TYPEDEF 1 */
  625.  
  626. /*
  627.  * Does your compiler give an ambiguity error on allocate()? If so, uncomment
  628.  * the following
  629.  */
  630.  
  631. /* #define _RWSTD_NO_ARG_MATCH 1 */
  632.  
  633. /*
  634.  * Does your compiler supply the new C++-style C headers?  If not,
  635.  * uncomment the following
  636.  */
  637.  
  638. /* #define _RWSTD_NO_NEW_HEADER 1 */
  639.  
  640.  
  641. /*
  642.  * does your compiler provide a placement new definition?  If no,
  643.  * uncomment the following
  644.  */
  645.  
  646. /* #define _RWSTD_NO_NEW_DECL 1 */
  647.  
  648. /*
  649.  * does your compiler inherit typedefs in templates correctly?  If no,
  650.  * uncomment the following
  651.  */
  652.  
  653. /* #define _RWSTD_NO_INHERITED_TYPEDEFS 1 */
  654.  
  655. /*
  656.  * Does your compiler have difficulty with constructors in a return
  657.  * statement?  If so then uncomment the following.
  658.  */
  659.  
  660. /* #define _RWSTD_NO_CTOR_RETURN 1 */
  661.  
  662. /*
  663.  * Does your compiler have difficulty with unDEFINED friends?  If so
  664.  * then uncomment the following.
  665.  */
  666.  
  667. /* #define _RWSTD_NO_UNDEFINED_FRIEND 1 */
  668.  
  669. /*
  670.  * Does your compiler have trouble with structures that lack a default
  671.  * constructor even when their instantiation is indirect?  If so
  672.  * then uncomment the following.
  673.  */
  674.  
  675. /* #define _RWSTD_NO_MEMBER_WO_DEF_CTOR 1 */
  676.  
  677. /* 
  678.  * Does your compiler allow un-initialized static members?  If not
  679.  * then uncomment the following.
  680.  */
  681.  
  682. /* #define _RWSTD_NO_UNINITIALIZED_STATIC_DEF 1 */
  683.  
  684. /*
  685.  * Does your compiler allow member types as template parameters?  If not
  686.  * then uncomment the following.
  687.  */
  688.  
  689. /* #define _RWSTD_NO_MEMBER_TYPE_TPARAM 1 */
  690.  
  691. /*
  692.  * Does your compiler dis-allow the use of 'static' in the out of line
  693.  * initialization of a static const member?  If so then uncomment the
  694.  * following.
  695.  */
  696.  
  697. /* #define _RWSTD_NO_STATIC_MEM_DEF 1 */
  698.  
  699. /*
  700.  * Does your compiler not allow default constructor syntax on built in
  701.  * types. (e.g. int i = int();).  If so then uncomment the following.
  702.  */
  703.  
  704. /* #define _RWSTD_NO_BUILTIN_CTOR 1 */
  705.  
  706. /* Does your compiler not allow defaults for parameters in function
  707.  * templates when the function parameter is a template parameter type.
  708.  * If so then uncomment the following.
  709.  */
  710.  
  711. /* #define _RWSTD_NO_DEFAULT_FOR_TPARAM 1 */
  712.  
  713. /* Does your compiler not allow name injection.  For instance, does it 
  714.  * allow member function specializations to be declared but not defined,
  715.  * so that the template versions of these functions will be used.
  716.  * If not, then uncomment the following.
  717.  */
  718.  
  719. /* #define _RWSTD_NO_NAME_INJECTION 1 */
  720.  
  721. /* Does your compiler have problems overloading on function template
  722.  * arguments that are partial specializations?  
  723.  * If so, then uncomment the following.
  724.  */
  725.  
  726. /* #define _RWSTD_NO_PART_SPEC_OVERLOAD 1 */
  727.  
  728. /* Does your compiler vendor supply wctype.h?
  729.  * If not, then uncomment the following.
  730.  */
  731.  
  732. /* #define _RWSTD_NO_WCTYPE_H 1 */
  733.  
  734. /* Can your compiler handle explicit instantiations?
  735.  * If not, then uncomment the following.
  736.  */
  737.  
  738. /* #define _RWSTD_NO_EXPLICIT_INSTANTIATION 1 */
  739.  
  740. /* Can your compiler handle explicit instantiations of
  741.  * function templates?
  742.  * If not, then uncomment the following.
  743.  */
  744.  
  745. /* #define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION 1 */
  746.  
  747. /* If your compiler requires the non-standard
  748.  * include file <ieeefp.h>, then uncomment the
  749.  * following.
  750.  */
  751.  
  752. /*  #define _RWSTD_REQUIRES_IEEEFP 1 */
  753.  
  754. /* If your compiler typedefs long double to 
  755.  * double, then uncomment the following.
  756.  */
  757.  
  758. /*  #define _RWSTD_NO_LONGDOUBLE 1 */
  759.  
  760. /* If your compiler does not support static_cast<>,
  761.    then uncomment the following.
  762. */
  763.  
  764. /*  #define _RWSTD_NO_STATIC_CAST 1 */
  765.  
  766. /* If your compiler doesn't support default values for const template
  767.  * reference arguements, then uncomment the following.
  768.  */
  769.  
  770. /*  #define  _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1 */
  771.  
  772. /*  If your compiler does not support using a template argument as a
  773.  *  default parameter, then uncomment the following.
  774.  */
  775.  
  776. /*  #define _RWSTD_NO_DEFAULT_TEMPLATE_ARGS 1 */
  777.  
  778. /* If your compiler does not support wide string null being
  779.  * defined as L"" but will work correctly when defined as L"\0",
  780.  * then uncomment the following.
  781.  */ 
  782. /*  #define _RWSTD_WIDE_STRING_NULL_PROBLEM 1 */
  783.  
  784. /* If your compiler does not support partial specialisation
  785.  * of template function, then uncomment the following.
  786.  */ 
  787.  
  788. /*  #define _RWSTD_NO_FUNC_PARTIAL_SPEC 1 */
  789.  
  790.  
  791. /* If your compiler does not support partial specialisation
  792.  * of template classes with default parameters, then uncomment
  793.  * the following.
  794.  */
  795.  
  796. /*  #define _RWSTD_NO_CLASS_PARTIAL_SPEC 1 */
  797.  
  798. /* If your compiler does not support overload of template function,
  799.  * then uncomment the following.
  800.  */
  801.  
  802. /*  #define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1 */
  803.  
  804. /* If your compiler has difficulties with multi dimensional arrays of
  805.  * container classes, then uncomment the following.
  806.  */
  807.  
  808. /*  #define _RWSTD_NO_MULTI_DIM_ARRAY 1 */
  809.  
  810. /* If your compiler does not provide a catopen/catgets style message
  811.  * catalog defined in header <nl_types.h>, then uncomment the following.
  812.  */
  813.  
  814. /*  #define _RWSTD_NO_CATOPEN_CATGETS 1 */
  815.  
  816.  
  817. /* If the exception handler functions are located in namespace std,
  818.  * then uncomment the following.
  819.  */
  820.  
  821. /*  #define _RWSTD_EXCEPTION_HANDLER_IN_STD 1 */
  822.  
  823. /* If your compiler has the class bad_alloc defined in new.h then
  824.  * uncomment the following.
  825.  */
  826.  
  827. /*  #define _RWSTD_BAD_ALLOC_DEFINED 1 */
  828.  
  829. /* If your compiler has the exception classes already defined 
  830.  * then uncomment the following.
  831.  */
  832.  
  833. /*  #define _RWSTD_EXCEPTIONS_PREDEFINED 1 */
  834.  
  835. /* If your compiler has the class exception in its own exception
  836.  * file then uncomment the following.
  837.  */
  838.  
  839. /*  #define _RWSTD_EXCEPTION_DEFINED 1 */
  840.  
  841. /* If your compiler has the class bad_exception in its own exception
  842.  * file then uncomment the following.
  843.  */
  844.  
  845. /*  #define _RWSTD_BAD_EXCEPTION_DEFINED 1 */
  846.  
  847. /* If your compiler will not accept opterator::new[]
  848.  * then uncomment the following.
  849.  */
  850.  
  851. /*  #define _RWSTD_NO_NEW_BRACKETS 1 */
  852.  
  853. /* If your compiler try to instantiate member function when
  854.  * creating variable of a class.
  855.  */
  856.  
  857. /*  #define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION 1 */
  858.  
  859. /* If your 'C' library does not provide overloads for the pow function
  860.  * (i.e. pow(float,float), and pow(long double, long double) if appropriate),
  861.  * then uncommment the following.
  862.  */
  863.  
  864. /*  #define _RWSTD_NO_OVERLOAD_C_POW 1 */
  865.  
  866. /* If your compiler does not have an mbstate_t type then uncomment
  867.  * the following.
  868.  */
  869.  
  870. /*  #define _RWSTD_NO_MBSTATE_T 1 */
  871.  
  872. /* If your compiler does not support the new template specialization
  873.  * syntax then umcomment the following
  874.  */
  875.  
  876. /* #define _RWSTD_NO_NEW_TEMPLATE_SYNTAX 1 */
  877.  
  878. /* If your compiler does not a have a throw specification on operator new
  879.  * then uncomment the following.
  880.  */
  881.  
  882. /*  #define _RWSTD_NO_THROW_SPEC_ON_NEW 1 */
  883.  
  884. /* 
  885.  * Uncomment this for EDG 2.36
  886.  */
  887.  
  888. /*  #define __NO_EDG_EXCEPTION_CLASSES=1 */
  889.  
  890. /*************************************************************************
  891. **************************************************************************
  892. **                                    **
  893. **        From here on, it's pretty much boilerplate        **
  894. **        and rarely requires any tuning.                **
  895. **                                    **
  896. **************************************************************************
  897. **************************************************************************/
  898.  
  899. /************************ Cfront derivatives ******************************/
  900.  
  901. /* Any of these defines a cfront style compiler: */
  902. #if defined(__ATT1__) || defined(__ATT2__) || defined(__ATT3__)
  903. #  define __ATT__ 1
  904. #endif
  905.  
  906. #endif // !(__TURBOC__) && !(_MSC_VER) &&!(__OS2__)
  907.  
  908. #define STARTWRAP
  909. #define ENDWRAP
  910.  
  911.  
  912. /*************************** Symantec *******************************/
  913.  
  914. /*
  915.  * No longer supports Zortech.  Must have Symantec V6.0 or greater.
  916.  */
  917. #if defined(__SC__)
  918. /*************************** For Macs *******************************/
  919. #  if defined(macintosh)
  920. //    rw config for standard library run on Symantec PPC version 8 release 4 tested by bdk 1-10-96
  921. #    pragma once
  922. #    define _RWSTD_NO_BOOL                            1
  923. #    define _RWSTD_COMPILE_INSTANTIATE               1
  924. #    define _RWSTD_NO_DEFAULT_TEMPLATE_ARGS          1
  925. #    define _RWSTD_NO_COMPLICATED_TYPEDEF            1
  926. #    define _RWSTD_NO_DEFAULT_TEMPLATES              1
  927. #    define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES       1
  928. #    define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES      1
  929. #    define _RWSTD_NO_ENUM_OP                        1
  930. #    define _RWSTD_NO_EXCEPTIONS                     1
  931. #    define _RWSTD_NO_EXPLICIT                       1
  932. #    define _RWSTD_NO_EXPLICIT_ARG                   1
  933. #    define _RWSTD_NO_EXPLICIT_INSTANTIATION         1
  934. #    define _RWSTD_NO_EX_SPEC                        1
  935. #    define _RWSTD_NO_FORWARD_SPECIALIZATIONS        1
  936. #    define _RWSTD_NO_FRIEND_TEMPLATES               1
  937. #    define _RWSTD_NO_GETTIMEOFDAY                   1
  938. #    define _RWSTD_NO_GLOBAL_TZ                      1
  939. #    define _RWSTD_NO_INT_TYPEDEF                    1
  940. #    define _RWSTD_NO_LEADING_UNDERSCORE             1
  941. #    define _RWSTD_NO_LOCALE                         1
  942. #    define _RWSTD_NO_LONG_HEADER_NAME               1
  943. #    define _RWSTD_NO_MEMBER_TEMPLATES               1
  944. #    define _RWSTD_NO_MEMBER_WO_DEF_CTOR             1
  945. #    define _RWSTD_NO_MEM_CLASS_TEMPLATES            1
  946. #    define _RWSTD_NO_MUTABLE                        1
  947. #    define _RWSTD_NO_NAMESPACE                      1
  948. #    define _RWSTD_NO_NESTING_TEMPLATES              1
  949. #    define _RWSTD_NO_NEW_HEADER                     1
  950. #    define _RWSTD_NO_NONCLASS_ARROW_RETURN          1
  951. #    define _RWSTD_NO_NONTYPE_ARGS                   1
  952. #    define _RWSTD_NO_OVERLOAD_WCHAR                 1
  953. #    define _RWSTD_NO_PART_SPEC_OVERLOAD             1
  954. #    define _RWSTD_NO_STATIC_DEF                     1
  955. #    define _RWSTD_NO_STI_SIMPLE                     1
  956. #    define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE    1
  957. #    define _RWSTD_NO_TEMPLATE_TEMPLATE              1
  958. #    define _RWSTD_NO_TYPENAME                       1
  959. #    define _RWSTD_NO_WCTYPE_H                       1
  960. #    define _RWSTD_NO_WSTR                           1
  961. #    define _RWSTD_NO_STATIC_CAST                    1
  962. #    define _RWSTD_NO_UNDEFINED_FRIEND               1
  963. #    define _RWSTD_MSC22_STATIC_INIT_BUG             1
  964.  
  965. // not currently tested in config but required
  966. #ifndef _RWSTD_HEADER_REQUIRES_HPP
  967. #    define _RWSTD_HEADER_REQUIRES_HPP               1
  968. #endif
  969. #    define _RWSTD_FRIEND_BEFORE_INLINE              1
  970. #    define _RWSTD_NO_LONG_NAME                      1
  971. #    define _RWSTD_FILL_NAME_CLASH                   1
  972.  
  973. // from previous testing
  974. #    define _RWSTD_CRLF_CONVENTION                   1
  975. /*************************** For PC's *******************************/
  976. #  else
  977. #    define __MSDOS__                1
  978. #    define _RWSTD_COMPILE_INSTANTIATE   1
  979.  
  980. #    if (__SC__ <= 0x610)
  981. #      define _RWSTD_NO_EXCEPTIONS       1
  982. #      define _RWSTD_NO_GETTIMEOFDAY     1
  983. #      define _RWSTD_NO_GLOBAL_TZ        1
  984. #      define _RWSTD_NO_OVERLOAD_WCHAR   1
  985. #      define _RWSTD_NO_WSTR             1
  986. #    endif
  987. #  endif
  988. #endif
  989.  
  990. /********************** Borland's Turbo C++ **************************/
  991.  
  992. #if defined(__TURBOC__)
  993.  
  994. #define _RWSTD_NO_LONG_HEADER_NAME          1
  995.  
  996. #  if defined(__MSDOS__) && defined(_Windows)
  997. #    define __WIN16__ 1
  998. #  endif
  999.  
  1000. /* 
  1001.  * For Borland, the __export keyword in a function declaration must 
  1002.  * come after the return type: 
  1003.  */
  1004. #  define RWSTD_TRAILING_RWEXPORT 1
  1005.    /*
  1006.     * Turbo and Borland won't inline code that contains loops or that
  1007.     * generates temporaries requiring destructors or that has an exception
  1008.     * specification:
  1009.     */
  1010. #  define _RWSTD_NO_TRICKY_INLINES           1
  1011.  
  1012. #  define _RWSTD_NO_LEADING_UNDERSCORE       1
  1013.  
  1014.    /* The Borland compilers left out this definition: */
  1015. #  define name2 _Paste2
  1016.  
  1017.    /* Turbo C++ V1.00 forgets the segment address when passing
  1018.       a class as a far reference if the class has not been defined. */
  1019. #  if __TURBOC__ <= 0x0295
  1020. #    define _RWSTD_UNDEFINED_REFERENCE_BUG    1
  1021. #  endif
  1022.  
  1023. #  if __TURBOC__ >=0x200
  1024.  
  1025. /*
  1026.  *  In Borland C++ versions previous to 4.0, wchar_t is not a
  1027.  *  built-in type and there are no exceptions
  1028.  */
  1029. #    if __TURBOC__ < 0x449
  1030. #      define _RWSTD_NO_EXCEPTIONS         1
  1031. #      define _RWSTD_NO_FRIEND_INLINE_DECL 1
  1032. #      define _RWSTD_NO_OVERLOAD_WCHAR     1
  1033. #    endif
  1034.  
  1035.      /* Borland 4.5 and before. */
  1036. #    if __TURBOC__ < 0x469
  1037. #      define _RWSTD_NO_BOOL                         1
  1038. #      define _RWSTD_NO_BAD_CAST                     1
  1039. #      define _RWSTD_NO_CONST_INST                   1
  1040. #      define _RWSTD_NO_CATOPEN_CATGETS              1
  1041. #      define _RWSTD_NO_EXPLICIT                     1
  1042. #      define _RWSTD_NO_EXPLICIT_ARG                    1
  1043. #      define _RWSTD_NO_EXPLICIT_INSTANTIATION       1
  1044. #      define _RWSTD_NO_FO_RWARD_DEFAULT_TEMPLATES    1
  1045. #      define _RWSTD_NO_FORWARD_SPECIALIZATIONS        1
  1046. #      define _RWSTD_NO_INSTANTIATE                  1
  1047. #      define _RWSTD_NO_FRIEND_TEMPLATES             1
  1048. #      define _RWSTD_NO_INT_TYPEDEF                  1
  1049. #      define _RWSTD_NO_LOCALE                       1
  1050. #      define _RWSTD_NO_LONG_NAME                    1
  1051. #      define _RWSTD_NO_MUTABLE                      1
  1052. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  1053. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1054. #      define _RWSTD_NO_NAMESPACE                    1
  1055. #      define _RWSTD_NO_NESTING_TEMPLATES            1
  1056. #      define _RWSTD_NO_NEW_HEADER                   1
  1057. #      define _RWSTD_NO_NONCLASS_ARROW_RETURN        1
  1058. #      define _RWSTD_NO_NONTYPE_ARGS                 1
  1059. #      define _RWSTD_NO_PART_SPEC_OVERLOAD           1
  1060. #      define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES     1
  1061. #      define _RWSTD_NO_STATIC_DEF3                  1
  1062. #      define _RWSTD_NO_STI_SIMPLE                   1
  1063. #      define _RWSTD_NO_SWPRINTF                     1
  1064. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  1065. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  1066. #      define _RWSTD_NO_TYPENAME                     1
  1067. #      define _RWSTD_NO_WCTYPE_H                     1
  1068. #      define _RWSTD_NO_WSTR                         1
  1069. #      define _RWSTD_NO_WINT_TYPE                    1
  1070. #      define _RWSTD_NO_STATIC_CAST                  1
  1071. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  1072. #      define _RWSTD_NO_POINTER_ALLOCATOR            1
  1073. #      define _RWSTD_EXPLICIT_SCOPE_DESTROY          1
  1074. #    endif
  1075.  
  1076.  
  1077. /*
  1078.  *   Borland 5.0 - 5.02:
  1079.  *   implements namespaces, bool and _MUTABLE
  1080.  */
  1081. #    if __TURBOC__ >= 0x469
  1082.  
  1083. # if  (__TURBOC__ == 0x520)
  1084. // Borland 5.02 & Borland C++Builder 1.0
  1085. #      define _RWSTD_BC5_ENUM_BUG                    1
  1086. #      define _RWSTD_NO_BAD_CAST                     1
  1087. #      define _RWSTD_NO_CATOPEN_CATGETS              1
  1088. #      define _RWSTD_NO_COMPLICATED_TYPEDEF          1
  1089. #      define _RWSTD_NO_CONST_INST                   1
  1090. #      define _RWSTD_NO_EXPLICIT_ARG                    1
  1091. #      define _RWSTD_NO_FRIEND_TEMPLATES             1
  1092. #      define _RWSTD_NO_INSTANTIATE                  1
  1093. #      define _RWSTD_NO_LOCALE                       1
  1094. #      define _RWSTD_NO_LONG_NAME                    1
  1095. #      define _RWSTD_NO_NAMESPACE                    1
  1096. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  1097. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1098. #      define _RWSTD_NO_NESTING_TEMPLATES            1
  1099. #      define _RWSTD_NO_NEW_HEADER                   1
  1100. #      define _RWSTD_NO_NONCLASS_ARROW_RETURN        1
  1101. #      define _RWSTD_NO_NONTYPE_ARGS                 1
  1102. #      define _RWSTD_NO_PART_SPEC_OVERLOAD           1
  1103. #      define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES     1
  1104. #      define _RWSTD_NO_STATIC_DEF3                  1
  1105. #      define _RWSTD_NO_SWPRINTF                     1
  1106. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  1107. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  1108. #      define _RWSTD_NO_TYPENAME                     1
  1109. #      define _RWSTD_NO_WINT_TYPE                    1
  1110. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  1111. #      define _RWSTD_NO_STI_SIMPLE                   1
  1112. #      ifdef __WIN16__
  1113. #        define _RWSTD_NO_MEMBER_WO_DEF_CTOR         1
  1114. #      endif
  1115. #      define _RWSTD_EXPLICIT_SCOPE_DESTROY          1
  1116. #      define _RWSTD_NO_WCTYPE_H                     1
  1117. #      define _RWSTD_NO_WCHAR_H                      1
  1118. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  1119. #      define _RWSTD_NO_FUNC_PARTIAL_SPEC            1
  1120. #      define _RWSTD_NO_SIGNED_CHAR_IN_STREAMS       1
  1121. #      define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1
  1122. #      define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION    1
  1123. #      define _RWSTD_NO_OVERLOAD_C_POW               1
  1124. #      define _RWSTD_NO_NEW_TEMPLATE_SYNTAX          1
  1125. #      define _RWSTD_NO_MBSTATE_T                    1
  1126. #      define _RWSTD_NO_WSTR                         1
  1127.  
  1128. #endif
  1129. # if  (__TURBOC__ == 0x530)
  1130.  
  1131. // Borland C++ Builder 3.0 (BCB)
  1132. #      define _RWSTD_EXCEPTION_HANDLER_IN_STD        1 // It's in except.h
  1133. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  1134. #      define _RWSTD_NO_CATOPEN_CATGETS              1
  1135. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  1136. #      define _RWSTD_NO_CONST_INST                   1
  1137. #      define _RWSTD_NO_EXPLICIT_ARG                 1
  1138. #      define _RWSTD_NO_FRIEND_TEMPLATES             1
  1139. #      define _RWSTD_NO_INSTANTIATE                  1
  1140. #      define _RWSTD_NO_LONG_NAME                    1
  1141. #      define _RWSTD_NO_MBSTATE_T                    1
  1142. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  1143. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1144. #      define _RWSTD_NO_NEW_BRACKETS                 1
  1145. #      define _RWSTD_NO_NEW_TEMPLATE_SYNTAX          1
  1146. #      define _RWSTD_NO_NONCLASS_ARROW_RETURN        1
  1147. //#      define _RWSTD_NO_STATIC_DEF3                  1
  1148. #      define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION    1
  1149. #      define _RWSTD_NO_OVERLOAD_C_POW               1
  1150. #      define _RWSTD_NO_STATIC_MEM_DEF               1
  1151. #      define _RWSTD_NO_STI_SIMPLE                   1
  1152. #      define _RWSTD_NO_STI_TEMPLATE                 1
  1153. #      define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE  1
  1154. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  1155. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  1156. #      define _RWSTD_NO_TYPEDEF_OVERLOAD             1
  1157. #      define _RWSTD_NO_TEMPLATE_REPOSITORY          1
  1158.  
  1159. //     Enable iostream support for extra-long integer type.
  1160. #      define _RWSTD_LONG_LONG                       __int64
  1161. #      define _RWSTD_LONG_LONG_PRINTF_PREFIX         "L"
  1162.  
  1163. #    endif // Borland 0x530
  1164. #  endif  // Borland > 4.5
  1165.  
  1166. #    ifdef __MT__
  1167. #      define _RWSTD_MULTI_THREAD 1
  1168. #    endif
  1169.  
  1170. #  endif    /* end post Turbo C++ V1.01 section */
  1171. #endif    /* __TURBOC__ */
  1172.  
  1173. /************************ Microsoft C/C++ *****************************/
  1174.  
  1175. /* We test for the presence of _MSC_VER with the absence of __BORLANDC__
  1176.    since the Borland implementation of MFC enables the _MSC_VER define.
  1177. */
  1178. #if defined(_MSC_VER) && !defined(__BORLANDC__)
  1179.  
  1180. // Disable MSVC's min and max macros
  1181. #  ifndef NOMINMAX
  1182. #    define NOMINMAX                1
  1183. #  endif
  1184.  
  1185. #  define _RWSTD_MSC_BACKEND       1
  1186.  
  1187. /* MSVC version 2.1 */
  1188. #if _MSC_VER < 901
  1189. #      define _RWSTD_NO_BASE_CLASS_MATCH                1
  1190. #      define _RWSTD_NO_CTOR_RETURN                  1
  1191. #      define _RWSTD_NO_UNDEFINED_FRIEND            1
  1192. #      define _RWSTD_NO_MEMBER_WO_DEF_CTOR           1
  1193. #      define _RWSTD_NO_UNINITIALIZED_STATIC_DEF     1
  1194. #      define _RWSTD_NO_DEFAULT_FOR_TPARAM           1
  1195. #      define _RWSTD_NO_FORWARD_SPECIALIZATIONS      1
  1196. #      define _RWSTD_NO_MEMBER_TYPE_TPARAM           1
  1197. #      define _RWSTD_NO_NAME_INJECTION               1
  1198. #      define _RWSTD_NO_LONG_HEADER_NAME             1
  1199. #      define _RWSTD_NO_OVERLOAD_WCHAR               1
  1200. #      define _RWSTD_NO_WCTYPE_H                     1
  1201. #      define _RWSTD_NO_PART_SPEC_OVERLOAD           1
  1202. #      define _RWSTD_NO_BOOL                         1
  1203. #      define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES     1
  1204. #      define _RWSTD_NO_FO_RWARD_DEFAULT_TEMPLATES    1
  1205. #      define _RWSTD_NO_LOCALE                       1
  1206. #      define _RWSTD_NO_MUTABLE                      1
  1207. #      define _RWSTD_NO_NAMESPACE                    1
  1208. #      define _RWSTD_NO_EXPLICIT                     1
  1209. #      define _RWSTD_NO_EXPLICIT_ARG                1
  1210. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  1211. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1212. #      define _RWSTD_NO_NESTING_TEMPLATES            1
  1213. #      define _RWSTD_NO_NEW_HEADER                   1
  1214. #      define _RWSTD_NO_NONTYPE_ARGS                 1
  1215. #      define _RWSTD_NO_STATIC_DEF                   1 
  1216. #      define _RWSTD_NO_STATIC_DEF3                  1 
  1217. #      define _RWSTD_NO_STI_SIMPLE                   1
  1218. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  1219. #      define _RWSTD_NO_TYPENAME                     1
  1220. #      define _RWSTD_NO_BUILT_IN_CTOR                1
  1221. #      define _RWSTD_NO_NEW_DECL                     1
  1222. #      define _RWSTD_COMPILE_INSTANTIATE             1
  1223. #      define _RWSTD_NO_DESTROY_NONBUILTIN           1
  1224. #      define _RWSTD_NO_STATIC_MEM_DEF               1
  1225. #      define _RWSTD_NO_TEMPLATE_SPECIALIZATION      1
  1226. #      define _RWSTD_NO_EXCEPTIONS                   1
  1227. #      define _RWSTD_NO_STATIC_CAST                  1
  1228. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  1229. #      define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1
  1230. #      define _RWSTD_MSC22_STATIC_INIT_BUG           1
  1231. #      define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION  1
  1232. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  1233. #      define _RWSTD_NO_FUNC_PARTIAL_SPEC            1
  1234.  
  1235. /* MSVC version 4.0 and 4.1 */
  1236. #elif _MSC_VER < 1011
  1237. #      define _RWSTD_COMPILE_INSTANTIATE             1
  1238. #      define _RWSTD_MS40_ISTREAM_BUG                1
  1239. #      define _RWSTD_NO_BAD_CAST                     1
  1240. #      define _RWSTD_NO_BOOL                         1
  1241. #      define _RWSTD_NO_BUILT_IN_CTOR                1
  1242. #      define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES    1
  1243. #      define _RWSTD_NO_CONST_INST                   1
  1244. #      define _RWSTD_NO_EX_SPEC                      1
  1245. #      define _RWSTD_NO_EXPLICIT                     1
  1246. #      define _RWSTD_NO_EXPLICIT_ARG                 1
  1247. #      define _RWSTD_NO_FO_RWARD_DEFAULT_TEMPLATES    1
  1248. #      define _RWSTD_NO_FRIEND_TEMPLATES             1
  1249. #      define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1
  1250. #      define _RWSTD_NO_INSTANTIATE                  1
  1251. #      define _RWSTD_NO_LOCALE                       1
  1252. #      define _RWSTD_NO_LONG_HEADER_NAME             1
  1253. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  1254. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1255. #      define _RWSTD_NO_MUTABLE                      1
  1256. #      define _RWSTD_NO_NAMESPACE                    1
  1257. #      define _RWSTD_NO_NEW_HEADER                   1
  1258. #      define _RWSTD_NO_NONTYPE_ARGS                 1
  1259. #      define _RWSTD_NO_OVERLOAD_FUNC_PTR            1
  1260. #      define _RWSTD_NO_OVERLOAD_WCHAR               1
  1261. #      define _RWSTD_NO_PART_SPEC_OVERLOAD           1
  1262. #      define _RWSTD_NO_STATIC_DEF                   1
  1263. #      define _RWSTD_NO_STATIC_DEF3                  1
  1264. #      define _RWSTD_NO_STATIC_MEM_DEF               1
  1265. #      define _RWSTD_NO_STI_SIMPLE                   1
  1266. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  1267. #      define _RWSTD_NO_TEMPLATE_SPECIALIZATION      1
  1268. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  1269. #      define _RWSTD_NO_TYPENAME                     1
  1270. #      define _RWSTD_NO_UNDEFINED_FRIEND             1
  1271. #      define _RWSTD_NO_WCTYPE_H                     1
  1272. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  1273. #      define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION  1
  1274. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  1275. #      define _RWSTD_NO_FUNC_PARTIAL_SPEC            1
  1276. #      define _RWSTD_EXCEPTION_PREDEFINED            1
  1277. #      define _RWSTD_LOGIC_ERROR_PREDEFINED          1
  1278. #      define _RWSTD_NO_NEW_BRACKETS                 1
  1279.  
  1280. // Disable MSC's "Same type qualifier used more than once" warning
  1281. #pragma warning ( disable : 4114)
  1282.  
  1283. #if _MSC_VER > 1000
  1284. // Disable MSVC's "bool is reserved word" warning where appropriate
  1285. #define _RWSTD_MSVC_BOOL_WARNING        1
  1286. #define _RWSTD_NO_NONCLASS_ARROW_RETURN 1
  1287. #endif
  1288.  
  1289. // MSVC 4.2
  1290. #elif _MSC_VER < 1100
  1291. #      define _RWSTD_COMPILE_INSTANTIATE             1
  1292. #      define _RWSTD_MS40_ISTREAM_BUG                1
  1293. #      define _RWSTD_NO_BAD_CAST                     1
  1294. #      define _RWSTD_NO_BOOL                         1
  1295. #      define _RWSTD_NO_BUILT_IN_CTOR                1
  1296. #      define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES    1
  1297. #      define _RWSTD_NO_CONST_INST                   1
  1298. #      define _RWSTD_NO_EX_SPEC                      1
  1299. #      define _RWSTD_NO_EXPLICIT                     1
  1300. #      define _RWSTD_NO_EXPLICIT_ARG                 1
  1301. #      define _RWSTD_NO_FO_RWARD_DEFAULT_TEMPLATES    1
  1302. #      define _RWSTD_NO_FRIEND_TEMPLATES             1
  1303. #      define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1
  1304. #      define _RWSTD_NO_INSTANTIATE                  1
  1305. #      define _RWSTD_NO_LOCALE                       1
  1306. #      define _RWSTD_NO_LONG_HEADER_NAME             1
  1307. #      define _RWSTD_NO_MEMBER_TEMPLATES             1
  1308. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1309. #      define _RWSTD_NO_MUTABLE                      1
  1310. #      define _RWSTD_NO_NAMESPACE                    1
  1311. #      define _RWSTD_NO_NEW_HEADER                   1
  1312. #      define _RWSTD_NO_NONTYPE_ARGS                 1
  1313. #      define _RWSTD_NO_OVERLOAD_FUNC_PTR            1
  1314. #      define _RWSTD_NO_OVERLOAD_WCHAR               1
  1315. #      define _RWSTD_NO_PART_SPEC_OVERLOAD           1
  1316. #      define _RWSTD_NO_STATIC_DEF                   1
  1317. #      define _RWSTD_NO_STATIC_DEF3                  1
  1318. #      define _RWSTD_NO_STATIC_MEM_DEF               1
  1319. #      define _RWSTD_NO_STI_SIMPLE                   1
  1320. #      define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE      1
  1321. #      define _RWSTD_NO_TEMPLATE_SPECIALIZATION      1
  1322. #      define _RWSTD_NO_TEMPLATE_TEMPLATE            1
  1323. #      define _RWSTD_NO_TYPENAME                     1
  1324. #      define _RWSTD_NO_UNDEFINED_FRIEND             1
  1325. #      define _RWSTD_NO_WCTYPE_H                     1
  1326. #      define _RWSTD_FLT_ROUNDS_IS_CONSTANT          1
  1327. #      define _RWSTD_EXCEPTION_PREDEFINED            1
  1328. #      define _RWSTD_NO_NEW_BRACKETS                 1
  1329.  
  1330. // Disable MSC's "Same type qualifier used more than once" warning
  1331. #pragma warning ( disable : 4114)
  1332.  
  1333. // Disable MSVC's "bool is reserved word" warning where appropriate
  1334. #define _RWSTD_MSVC_BOOL_WARNING        1
  1335. #define _RWSTD_NO_NONCLASS_ARROW_RETURN 1
  1336. // MSVC 5.0 
  1337. #else 
  1338.  
  1339. #      define _RWSTD_NO_BUILT_IN_CTOR                1
  1340. #      define _RWSTD_NO_CONST_INST                   1
  1341. #      define _RWSTD_NO_NAMESPACE                    1
  1342. #      define _RWSTD_NO_NEW_HEADER                   1
  1343. #      define _RWSTD_NO_TEMPLATE_SPECIALIZATION      1
  1344. #      define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION  1
  1345. #      define _RWSTD_NO_UNDEFINED_FRIEND             1
  1346. #      define _RWSTD_NO_LONG_HEADER_NAME             1
  1347. #      define _RWSTD_MS40_ISTREAM_BUG                1
  1348. #      define _RWSTD_NO_TYPENAME                     1
  1349. #      define _RWSTD_NO_FORWARD_SPECIALIZATIONS      1
  1350. #      define _RWSTD_NO_NONCLASS_ARROW_RETURN        1
  1351. #      define _RWSTD_NO_MEM_CLASS_TEMPLATES          1
  1352. #      define _RWSTD_NO_CLASS_PARTIAL_SPEC           1
  1353.  
  1354.  
  1355. // Maybes
  1356. #define _RWSTD_NO_COMPLICATED_TYPEDEF 1
  1357. #define _RWSTD_NO_SIGNED_CHAR_IN_STREAMS 2
  1358. #define _RWSTD_NO_EXPLICIT_INSTANTIATION 1
  1359. #define _RWSTD_NO_INSTANTIATE 1
  1360.  
  1361. // Set by rwsetup
  1362.  
  1363. #define _RWSTD_COMPILE_INSTANTIATE 1  /* Not set by rwsetup... */
  1364.                                       /* bad script, no donut  */ 
  1365. #define _RWSTD_NO_OVERLOAD_WCHAR 1
  1366. #define _RWSTD_NO_WCSXFRM 1
  1367. #define _RWSTD_NO_BAD_CAST 1
  1368. #define _RWSTD_NO_SWPRINTF 1
  1369. #define _RWSTD_NO_NONTYPE_ARGS 1
  1370. #define _RWSTD_NO_MEMBER_TEMPLATES 1
  1371. #define _RWSTD_NO_STI_SIMPLE 1 
  1372. #define _RWSTD_NO_STI_TEMPLATE 1
  1373. #define _RWSTD_FLT_ROUNDS_IS_CONSTANT 1
  1374. #define _RWSTD_NO_TEMPLATE_TEMPLATE 1
  1375. #define _RWSTD_NO_STATIC_CAST 1
  1376. #define _RWSTD_NO_TYPEDEF_OVERLOAD 1
  1377. #define _RWSTD_NO_STATIC_MEM_DEF 1
  1378. #define _RWSTD_NO_PART_SPEC_OVERLOAD 1
  1379. #define _RWSTD_NO_FUNC_PARTIAL_SPEC 1
  1380. #define _RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION 1
  1381. #define _RWSTD_NO_CATOPEN_CATGETS 1
  1382. #define _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE 1
  1383. #define _RWSTD_NO_NEW_BRACKETS 1
  1384. #define _RWSTD_NO_ONLY_NEEDED_INSTANTIATION 1
  1385. #define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1
  1386. #define _RWSTD_NO_OVERLOAD_C_POW 1
  1387.    
  1388. // Disable MSVC's "Same type qualifier used more than once" warning
  1389. #pragma warning ( disable : 4114)
  1390.  
  1391. #endif /* MSVC versions */
  1392.  
  1393.  
  1394. #  if defined(_MSDOS) && !defined(WIN32) && !defined(_WIN32)
  1395. #    define __MSDOS__   1
  1396. #    if defined(_WINDOWS)
  1397. #      define __WIN16__ 1
  1398. #    endif
  1399. #  endif
  1400. #  if defined(WIN32) || defined(_WIN32)
  1401. #    define __WIN32__
  1402. #    define _RWSTD_TOLOWER_SIGN_EXTENDS_RESULT_BUG 1
  1403. #  else
  1404. #    define _RWSTD_NO_WSTR 1
  1405. #  endif
  1406.  
  1407. #  ifdef _RWBUILDDLL
  1408. #    define __DLL__ 1
  1409. #  endif
  1410.  
  1411. #  ifdef _M_I86SM
  1412. #    define __SMALL__ 1
  1413. #  endif
  1414. #  ifdef _M_I86CM
  1415. #    define __COMPACT__ 1
  1416. #  endif
  1417. #  ifdef _M_I86MM
  1418. #    define __MEDIUM__ 1
  1419. #  endif
  1420. #  ifdef _M_I86LM
  1421. #    define __LARGE__ 1
  1422. #  endif
  1423. #  ifdef _MT
  1424. #    define _RWSTD_MULTI_THREAD 1
  1425. #  endif
  1426. #endif
  1427.  
  1428.  
  1429. /********************** Metaware High C/C++ ***************************/
  1430.  
  1431. #if defined(__HIGHC__)
  1432. #  define _RWSTD_NO_OVERLOAD_WCHAR 1
  1433. #  if defined(_MSDOS)
  1434. #    define __MSDOS__ 1
  1435. #    define _RWSTD_HIGHC_INLINE_BUG  1
  1436. #    define _RWSTD_NO_EXCEPTIONS     1
  1437. #    define _RWSTD_NO_WSTR 1
  1438. #  endif
  1439.  
  1440. #  if defined(_OS2)
  1441. #    undef __OS2__
  1442. #    define __OS2__ 1
  1443. #    define _RWSTD_SUPPLY_WSTR 1
  1444. #    define _RWSTD_NO_WCSXFRM  1
  1445. #    ifdef _REENTRANT
  1446. #      define _RWSTD_MULTI_THREAD 1
  1447. #    endif
  1448. #  endif
  1449.  
  1450. #  if defined(_MSNT)
  1451. #    undef __WIN32__
  1452. #    define __WIN32__ 1
  1453. #    define _RWSTD_NO_WSTR 1
  1454. #    if defined(_REENTRANT) || defined(_MT)
  1455. #      define _RWSTD_MULTI_THREAD 1
  1456. #    endif
  1457. #  endif
  1458.  
  1459. #endif  /* __HIGHC__ */
  1460.  
  1461. /************************** MPW *************************************/
  1462.  
  1463. #if defined(applec)
  1464. #  define _RWSTD_BROKEN_TOKEN_PASTE    1
  1465. #  define _RWSTD_REVERSED_CR_AND_LF    1
  1466. #  define _RWSTD_NATIVE_EXTENDED       1
  1467. #  define _RWSTD_NO_ACCESS_ADJUSTMENT  1
  1468. #  define _RWSTD_NO_EXCEPTIONS         1
  1469. #  define _RWSTD_NO_GETTIMEOFDAY       1
  1470. #  define _RWSTD_NO_GLOBAL_TZ          1
  1471. #  define _RWSTD_NO_LEADING_UNDERSCORE 1
  1472. #  define _RWSTD_NO_OSTR_REF_CAST      1
  1473. #  define _RWSTD_NO_OVERLOAD_WCHAR     1
  1474. #  define _RWSTD_NO_WSTR               1
  1475. #endif
  1476.  
  1477. /********************** IBM C/Set++   *********************************/
  1478.  
  1479. #ifdef __IBMCPP__
  1480. #  ifdef __MULTI__
  1481. #    define _RWSTD_MULTI_THREAD 1
  1482. #  endif //__MULTI__
  1483.  
  1484. /********************** IBM Visual Age *******************************/
  1485. #ifdef __OS2__ //
  1486. #  define _RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE 1
  1487. #  define _RWSTD_NO_FPOS_T                    1
  1488. #  define _RWSTD_NO_LDIV                      1
  1489. #  define _RWSTD_NO_WCTYPE_H                  1
  1490. #  define _RWSTD_NO_SWPRINTF                  1
  1491. #  define _RWSTD_NO_BOOL                      1
  1492. #  define _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES  1
  1493. #  define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES 1
  1494. #  define _RWSTD_NO_MUTABLE                   1
  1495. #  define _RWSTD_NO_NAMESPACE                 1
  1496. #  define _RWSTD_NO_MEMBER_TEMPLATES          1
  1497. #  define _RWSTD_NO_TYPENAME                  1
  1498. #  define _RWSTD_NO_MEM_CLASS_TEMPLATES       1
  1499. #  define _RWSTD_NO_STI_SIMPLE                1
  1500. #  define _RWSTD_NO_LONG_NAME                 1
  1501. #  define _RWSTD_NO_TEMPLATE_TEMPLATE         1
  1502. #  define _RWSTD_NO_STATIC_CAST               1
  1503. #  define _RWSTD_NO_EXPLICIT_ARG              1
  1504. #  define _RWSTD_NO_NEW_HEADER                1
  1505. #  define _RWSTD_NO_EXPLICIT                  1
  1506. #  define _RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG  1
  1507. #  define _RWSTD_NO_EXPLICIT_INSTANTIATION    1
  1508. #  define _RWSTD_NO_NONCLASS_ARROW_RETURN     1
  1509. #  define _RWSTD_COMPILE_INSTANTIATE          1
  1510. #  define _RWSTD_NO_LONG_HEADER_NAME          1
  1511. #  define _RWSTD_NO_PART_SPEC_OVERLOAD        1
  1512. #  define _RWSTD_NO_TEMPLATE_SPECIALIZATION   1
  1513. #  define _RWSTD_NO_STATIC_DEF3               1
  1514. #  define _RWSTD_WIDE_STRING_NULL_PROBLEM     1
  1515. #  define _RWSTD_NO_DESTROY_BUILTIN        1
  1516. #endif //OS2
  1517. #endif //IBMCPP
  1518.  
  1519.  
  1520. /********************** IBM xlC   *********************************/
  1521.  
  1522. #if defined(_AIX) && !defined(unix)
  1523. #define unix 1
  1524. #endif
  1525.  
  1526. /********************** Miscellaneous *********************************/
  1527.  
  1528. /*
  1529.  * These compilers instantiate templates at compile-time;
  1530.  * others at link-time.
  1531.  */
  1532. #if defined(__HIGHC__) || defined(__xlC__) || defined(__GNUG__) || defined(__WATCOMC__) || defined(__IBMCPP__) || defined(__os_cplusplus)
  1533. # define _RWSTD_COMPILE_INSTANTIATE 1
  1534. #endif
  1535.  
  1536. /* No Pi for these compilers: */
  1537. #if defined(_RWSTD_MSC_BACKEND) || defined(__OREGON__) || defined(__HIGHC__) || defined(applec) || defined(CII) || defined(__WATCOMC__)
  1538. #  ifndef M_PI
  1539. #    define M_PI 3.14159265358979323846
  1540. #  endif
  1541. #endif
  1542.  
  1543. /*
  1544.  * Only Sun defines strftime("%C", ...)
  1545.  */
  1546. #if !defined(_RWSTD_NO_STRFTIME_CAPC) && !defined(sun)
  1547. #define _RWSTD_NO_STRFTIME_CAPC 1
  1548. #endif
  1549.  
  1550. #ifdef sun
  1551. #  define _RWSTD_SUNPRO_ANACHRONISM 1
  1552. #endif
  1553.  
  1554. /********************** Environment *********************************/
  1555. /*
  1556.  * This is the section for setting things which depend on the properties
  1557.  * of the operating systems rather than specific compilers.  It follows
  1558.  * the compiler section so we have the chance to rationalize the different
  1559.  * preprocessor constants (e.g. _MSDOS vs. __MSDOS__,  _M_I86LM vs. __LARGE__)
  1560.  */
  1561.  
  1562. #ifndef _RWSTD_DEFAULT_PRECISION
  1563. #   define _RWSTD_DEFAULT_PRECISION 16    /* Assume standard IEEE format */
  1564. #endif
  1565.  
  1566. /*
  1567.  * Most (but not all) non-unix systems convert new line to carriage
  1568.  * return / line feed on output:
  1569.  */
  1570. #if defined(__MSDOS__) || defined(__OS2__) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__)
  1571. #  define _RWSTD_CRLF_CONVENTION 1
  1572. #endif
  1573.  
  1574. /*
  1575. ** Miscellaneous workarounds.
  1576. */
  1577.  
  1578. #ifdef _RWSTD_NO_BOOL
  1579. # ifdef _RWSTD_MSVC_BOOL_WARNING
  1580. #  pragma warning ( disable : 4237 )
  1581. # endif
  1582. typedef int     bool;
  1583. #define true    1
  1584. #define false   0
  1585. #endif
  1586.  
  1587. #ifndef _RWSTD_NO_TYPENAME
  1588. #define _TYPENAME typename
  1589. #else
  1590. #define _TYPENAME
  1591. #endif
  1592.  
  1593. #ifndef _RWSTD_NO_EXPLICIT
  1594. #define _EXPLICIT explicit
  1595. #else
  1596. #define _EXPLICIT 
  1597. #endif
  1598.  
  1599. #ifndef _RWSTD_NO_MUTABLE
  1600. #define _MUTABLE mutable
  1601. #else
  1602. #define _MUTABLE
  1603. #endif
  1604.  
  1605. #ifndef _RWSTD_NO_TRICKY_INLINES
  1606. #define _RWSTD_TRICKY_INLINE inline
  1607. #else
  1608. #define _RWSTD_TRICKY_INLINE
  1609. #endif
  1610.  
  1611. #ifdef _RWSTD_NO_MEMBER_WO_DEF_CTOR
  1612. #define _RWSTD_NO_CONST_INST 1
  1613. #endif
  1614.  
  1615. #if defined(_RWSTD_NO_STI_SIMPLE) && !defined(_RWSTD_NO_STI_TEMPLATE)
  1616. #define _RWSTD_NO_STI_TEMPLATE
  1617. #endif
  1618.  
  1619. #ifdef _RWSTD_NO_EXPLICIT_INSTANTIATION   
  1620. #    define _RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION    1
  1621. #endif
  1622.  
  1623. #ifdef _RWSTD_NO_WIDE_CHAR
  1624. #  define _RWSTD_NO_OVERLOAD_WCHAR 1
  1625. #  define _RWSTD_NO_WSTR 1
  1626. #endif
  1627.  
  1628. //
  1629. // Macro for comp being a reserved type
  1630. //
  1631.  
  1632. #ifdef macintosh
  1633. #  define _RWSTD_COMP compare
  1634. #else
  1635. #  define _RWSTD_COMP comp
  1636. #endif
  1637.  
  1638. //
  1639. // Macro for forming or omitting default template arguments in constructors
  1640. //
  1641.  
  1642. #ifndef _RWSTD_NO_DEFAULT_TEMPLATE_ARGS
  1643. #  define _RWSTD_DEFAULT_ARG(n) = n
  1644. #else
  1645. #  define _RWSTD_DEFAULT_ARG(n) 
  1646. #endif
  1647.  
  1648. //
  1649. // Macro for forming or ommitting default template parameters.
  1650. //
  1651. #ifndef _RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES
  1652. #  define _RWSTD_SIMPLE_DEFAULT(a)  = a
  1653. #  ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
  1654. #    define _RWSTD_COMPLEX_DEFAULT(a)  = a
  1655. #  else
  1656. #    define _RWSTD_COMPLEX_DEFAULT(a)
  1657. #  endif
  1658. #else
  1659. #  ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
  1660. #    define _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
  1661. #  endif
  1662. #  define _RWSTD_SIMPLE_DEFAULT(a)
  1663. #  define _RWSTD_COMPLEX_DEFAULT(a)
  1664. #  ifndef _RWSTD_NO_DEFAULT_TEMPLATES
  1665. #    define _RWSTD_NO_DEFAULT_TEMPLATES
  1666. #  endif
  1667. #endif
  1668.  
  1669. //
  1670. // Macros for adding 'std' or '__rwstd' to names
  1671. //
  1672. #ifndef _RWSTD_NO_NAMESPACE
  1673. #  ifdef _MSC_VER
  1674. #    define _STD ::std
  1675. #    define __RWSTD ::__rwstd
  1676. #  else
  1677. #    define _STD std
  1678. #    define __RWSTD __rwstd
  1679. #  endif
  1680. #else
  1681. #  define _STD 
  1682. #  define __RWSTD 
  1683. # endif
  1684.  
  1685. //
  1686. // Macro for casting, using either the "old" method
  1687. // or the new C++ cast system
  1688. //
  1689.  
  1690. #ifdef _RWSTD_NO_STATIC_CAST
  1691. #  define _RWSTD_STATIC_CAST(x,y) (x)y
  1692. #  define _RWSTD_REINTERPRET_CAST(x,y) (x)y
  1693. #  define _RWSTD_CONST_CAST(x,y) (x)y
  1694. #  define _RWSTD_REINTERPRET_CONST_CAST(x,y,z) x(z)
  1695. #else
  1696. #  define _RWSTD_STATIC_CAST(x,y) static_cast< x >(y)
  1697. #  define _RWSTD_REINTERPRET_CAST(x,y) reinterpret_cast< x >(y)
  1698. #  define _RWSTD_CONST_CAST(x,y) const_cast< x >(y)
  1699. #  define _RWSTD_REINTERPRET_CONST_CAST(x,y,z) reinterpret_cast< x >(const_cast< y >(z))
  1700. #endif
  1701.  
  1702. //  
  1703. // Macro for the new template specialization syntax
  1704. //
  1705. #ifdef _RWSTD_NO_NEW_TEMPLATE_SYNTAX
  1706. #  define _RWSTD_TEMPLATE 
  1707. #else
  1708. #  define _RWSTD_TEMPLATE template<>
  1709. #endif
  1710.  
  1711. //
  1712. // If compiler supports member and default templates then it support
  1713. // the _RWSTD_ALLLOCATOR
  1714. //
  1715. #if !defined(_RWSTD_NO_MEMBER_TEMPLATES) && !defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES)
  1716. #define _RWSTD_ALLOCATOR
  1717. #endif
  1718.  
  1719. //
  1720. // Define typedef macro
  1721. //
  1722. #ifdef _RWSTD_NO_EMBEDDED_TYPEDEF
  1723. #  define _RWSTD_ALLOC_SIZE_TYPE        Allocator::size_type
  1724. #  define _RWSTD_ALLOC_DIFF_TYPE        Allocator::difference_type
  1725. #else
  1726. #  define _RWSTD_ALLOC_SIZE_TYPE        allocator_type::size_type
  1727. #  define _RWSTD_ALLOC_DIFF_TYPE        allocator_type::difference_type
  1728. #endif
  1729.  
  1730. #define _RWSTD_MB_CUR_MAX 16  //???  Need to find absolute maximum for this
  1731.  
  1732. #ifndef _RWSTD_HEADER_REQUIRES_HPP
  1733. #include <compnent.h>
  1734. #else
  1735. #include <compnent.hpp>
  1736. #endif
  1737. //
  1738. // Define a generic macro for throw.  To be used as in the following:
  1739. //
  1740. //    _RWSTD_THROW(i < j && j < k, out_of_range, "j is out of range!");
  1741. //
  1742. //                ^ predicate     ^ exception   ^ message
  1743. //
  1744. // literally, if (predicate) throw exception(message)
  1745. //
  1746. #ifdef _RWSTD_NO_EXCEPTIONS
  1747. //
  1748. // If we don't have exceptions, then we'll use assert.
  1749. // We don't allow them to turn off the assert() in which such
  1750. // a thrown exception would result.
  1751. //
  1752.  
  1753. #ifdef  NDEBUG
  1754. #define __RW_NDEBUG
  1755. #undef  NDEBUG
  1756. #endif
  1757. #ifndef _RWSTD_NO_NEW_HEADER
  1758. #include <cassert>
  1759. #else
  1760. #include <assert.h>
  1761. #endif
  1762. #define _RWSTD_THROW_NO_MSG(PRED,EXC)  assert(!(PRED))
  1763. #define _RWSTD_THROW(PRED,EXC,MESG) assert(!(PRED))
  1764. //
  1765. // We must also turn off expansion of assert() if that's what the user expects.
  1766. //
  1767. #ifdef  __RW_NDEBUG
  1768. #define NDEBUG
  1769. #undef  __RW_NDEBUG
  1770. #endif
  1771. #else /*!_RWSTD_NO_EXCEPTIONS*/
  1772. //
  1773. // We must check to see if we can use <stdexcept> or just a string.
  1774. //
  1775. #ifdef _RW_STD_EXCEPT
  1776. #define _RWSTD_THROW_NO_MSG(PRED,EXC) if (PRED) throw EXC()
  1777. #define _RWSTD_THROW(PRED,EXC,MESG) if (PRED) throw EXC(MESG)  
  1778. #else
  1779. #define _RWSTD_THROW(PRED,EXC,MESG) if (PRED) throw (MESG)  
  1780. #endif
  1781. #endif /*_RWSTD_NO_EXCEPTIONS*/
  1782.  
  1783. //
  1784. // Define two generic throw specification macros.  One to illustrate
  1785. // the exceptions that a function can throw and the other to indicate
  1786. // that a function doesn't throw any exceptions.
  1787. //
  1788. //   _RWSTD_THROW_SPEC(ExceptionList)
  1789. //
  1790. //   _RWSTD_THROW_SPEC_NULL
  1791. //
  1792. // Owing to the face that the first macro must be able to take a
  1793. // variable number of arguments, we must simulate this by always
  1794. // passing the exceptions in parentheses; i.e.
  1795. //
  1796. //  void f () _RWSTD_THROW_SPEC((out_of_range));
  1797. //  void g () _RWSTD_THROW_SPEC((domain_error, invalid_argument));
  1798. //  void h () _RWSTD_THROW_SPEC((out_of_range, invalid_argument, length_error));
  1799. //
  1800.  
  1801. #if defined(_RWSTD_NO_EXCEPTIONS) || defined(_RWSTD_NO_EX_SPEC)
  1802. #define _RWSTD_THROW_SPEC(EXCEPTIONS) /**/
  1803. #define _RWSTD_THROW_SPEC_NULL        /**/
  1804. #else
  1805. #ifdef _RW_STD_EXCEPT
  1806. //
  1807. // _RWSTD_THROW will use the exceptions in <stdexcept>
  1808. //
  1809. #define _RWSTD_THROW_SPEC(ExceptionList) throw ExceptionList
  1810. #define _RWSTD_THROW_SPEC_NULL           throw()
  1811. #else
  1812. //
  1813. // _RWSTD_THROW will only throw const char *
  1814. //
  1815. #define _RWSTD_THROW_SPEC(ExceptionList) throw(const char *)
  1816. #define _RWSTD_THROW_SPEC_NULL           throw()
  1817. #endif
  1818. #endif /*_RWSTD_NO_EXCEPTIONS||_RWSTD_NO_EX_SPEC*/
  1819.  
  1820. #ifndef _RWSTD_NO_TRICKY_INLINES
  1821. #define _RWSTD_INLINE_NO_THROW _RWSTD_THROW_SPEC_NULL
  1822. #else
  1823. #define _RWSTD_INLINE_NO_THROW
  1824. #endif
  1825.  
  1826. #pragma option pop
  1827. #endif /* __STDCOMP_H */
  1828.